package com.kobeliu.entity;

import java.util.Arrays;

/**
 * @Author: Kobe_Liu
 * @Date: 2021/12/10 13:39
 */

/**
 * 竞赛第一题 简单题
 *
 * 小力将 N 个零件的报价存于数组 nums。小力预算为 target，假定小力仅购买两个零件，要求购买零件的花费不超过预算，请问他有多少种采购方案。
 *
 * 注意：答案需要以 1e9 + 7 (1000000007) 为底取模，如：计算初始结果为：1000000008，请返回 1
 *
 * 示例 1：
 *
 *     输入：nums = [2,5,3,5], target = 6
 *
 *     输出：1
 *
 *     解释：预算内仅能购买 nums[0] 与 nums[2]。
 *
 * 示例 2：
 *
 *     输入：nums = [2,2,1,9], target = 10
 *
 *     输出：4
 *
 *     解释：符合预算的采购方案如下：
 *     nums[0] + nums[1] = 4
 *     nums[0] + nums[2] = 3
 *     nums[1] + nums[2] = 3
 *     nums[2] + nums[3] = 10
 */
public class Demo_79_No2122 {

    public static void main(String[] args) {

        System.out.println(5/2);
    }

    /**
     * 超时了
     * @param nums
     * @param target
     * @return
     */
    public int purchasePlans1(int[] nums, int target) {
        //从小到大排序
        Arrays.sort(nums);
        int sum = 0;
        for(int i=0;i<nums.length-1;i++){
            if(nums[i]+nums[i+1]>target) break;
            for(int j=nums.length-1;j>i;j--){
                if(nums[i]+nums[j]<=target){
                    sum = (sum+j-i)%1000000007;
                    break;
                }
            }
        }
        return sum%1000000007;
    }

    public int purchasePlans(int[] nums, int target) {
        int left = 0,right=nums.length-1;
        int sum =  0;
        Arrays.sort(nums);
        while(left<right){
            if(nums[left]+nums[right]>target) right--;
            else{
                sum = (sum+right-left)%1000000007;
                left++;
            }
        }
        return sum%1000000007;

    }
}
